home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Entertainment / luff stuff / luff⁄inmove.c < prev    next >
C/C++ Source or Header  |  1985-11-08  |  4KB  |  182 lines

  1. #include "MacLuff.h"
  2.  
  3. /* Routin for input of moves and commands (Main event loop) */
  4. inmove(x, y) int *x, *y;{
  5.     FlushEvents(everyEvent, 0);
  6.     HiliteMenu(0);
  7.  
  8.     while(TRUE){
  9.     GetNextEvent(everyEvent, &my_event);
  10.     adjust_cursor();
  11.     mouse_p.h = my_event.where.h;
  12.     mouse_p.v = my_event.where.v;
  13.     GlobalToLocal(&mouse_p);
  14.     switch(my_event.what){
  15.         case mouseDown:
  16.         if(playcnt){
  17.             DisableItem(my_menus[3], YOUR_MOVE);
  18.             EnableItem(my_menus[3], REMOVE);
  19.         }
  20.         else{
  21.             EnableItem(my_menus[3], YOUR_MOVE);
  22.             DisableItem(my_menus[3], REMOVE);
  23.         }
  24.         switch(FindWindow(&my_event.where, &which_w)){
  25.             case inMenuBar:
  26.             if( do_command(MenuSelect(&my_event.where)) )
  27.                 return;
  28.             FlushEvents(everyEvent, 0);
  29.             break;
  30.             case inContent:
  31.             if(message_flag){
  32.                 EraseRect(&message_r);
  33.                 draw_holes();
  34.                 message_flag = FALSE;
  35.             }
  36.             if( !done_flag )
  37.                 if( the_w_click(x, y) )
  38.                 return;
  39.             break;
  40.             case inDrag:
  41.             DragWindow(which_w, &my_event.where, &drag_r);
  42.             break;
  43.         }
  44.         break;
  45.         case updateEvt:
  46.         BeginUpdate(the_w);
  47.         utboard();
  48.         EndUpdate(the_w);
  49.         break;
  50.      }
  51.     }
  52. }
  53.  
  54. do_command(help) int help;{
  55.     char who;
  56.     int x, y;
  57.  
  58.     the_menu =  HiWord(help);
  59.     the_item =  LoWord(help);
  60.     switch(the_menu){
  61.     case APPLE:
  62.         say_something();
  63.         break;
  64.     case FILE:
  65.         switch(the_item){
  66.         case NEW_GAME:
  67.             if(message_flag){
  68.             EraseRect(&message_r);
  69.             draw_holes();
  70.             message_flag = FALSE;
  71.             }
  72.             for(x = 0; x < XZIZE; x++)
  73.             for(y = 0; y < YZIZE; y++){
  74.                 if(board[x][y] != ' '){
  75.                 play[x][y] = 0;
  76.                 board[x][y] = ' ';
  77.                 update(x, y);
  78.                 draw_empty(x, y);
  79.                 }
  80.             }
  81.             EnableItem(my_menus[3], HINT);
  82.             EnableItem(my_menus[3], SHOW_GAME);
  83.             done_flag = FALSE;
  84.             playcnt = 0;
  85.             break;
  86.         case QUIT:
  87.             ExitToShell();
  88.             break;
  89.         }
  90.         break;
  91.     case HELP:
  92.         say_something_else();
  93.         break;
  94.     case COMMAND:
  95.         if(message_flag){
  96.         EraseRect(&message_r);
  97.         draw_holes();
  98.         message_flag = FALSE;
  99.         }
  100.         switch(the_item){
  101.         case YOUR_MOVE:
  102.             x = XZIZE/2;
  103.             y = YZIZE/2;
  104.             board[x][y] = 'o';
  105.             update(x, y);
  106.             play[x][y] = ++playcnt;
  107.             draw_o(x, y);
  108.             break;
  109.         case REMOVE:
  110.             while(TRUE){
  111.             if(playcnt == 0)
  112.                 break;
  113.             for(x = 0; x < XZIZE; x++)
  114.                 for(y = 0; y < YZIZE; y++)
  115.                 if(play[x][y] == playcnt){
  116.                     play[x][y] = 0;
  117.                     who = board[x][y];
  118.                     board[x][y] = ' ';
  119.                     update(x, y);
  120.                     draw_empty(x, y);
  121.                 }
  122.             playcnt--;
  123.             if(who == 'x')
  124.                 break;
  125.             }
  126.             EnableItem(my_menus[3], HINT);
  127.             EnableItem(my_menus[3], SHOW_GAME);
  128.             done_flag = FALSE;
  129.             break;
  130.         case SHOW_GAME:
  131.             slf = TRUE;
  132.             draw_message("Push mouse button to stop");
  133.             return(TRUE);
  134.             break;
  135.         case HINT:
  136.             if(chose('x', &x, &y))
  137.             draw_hint(x, y);
  138.             break;
  139.         }
  140.     break;
  141.     }
  142.     HiliteMenu(0);
  143.     return(FALSE);
  144. }
  145.  
  146. adjust_cursor(){
  147.     if(PtInRect(&mouse_p, &play_r))
  148.     SetCursor(&finger);
  149.     else
  150.     SetCursor(&QD->arrow);
  151. }
  152.  
  153. the_w_click(x, y) int *x, *y;{
  154.     if(PtInRect(&mouse_p, &play_r)){
  155.     *x = mouse_p.h/15;
  156.     *y = (mouse_p.v - 35)/15;
  157.     if(board[*x][*y] == ' '){
  158.         InvertRect(&xy_r[*x][*y]);
  159.         while(StillDown());
  160.         InvertRect(&xy_r[*x][*y]);
  161.         return(TRUE);
  162.     }
  163.     }
  164.     return(FALSE);
  165. }
  166.  
  167. say_something(){
  168.     EraseRect(&play_r);
  169.     MoveTo(50, 50);  DrawString("Luff is written by:");
  170.     MoveTo(50, 80);  DrawString("Roland Karlsson");
  171.     MoveTo(50, 95);  DrawString("Dpt. of Telecomm. & Computer Systems");
  172.     MoveTo(50, 110); DrawString("Royal Institute of Technology");
  173.     MoveTo(50, 125); DrawString("S-100 44 Stockholm, SWEDEN");
  174.     MoveTo(50, 150); DrawString("roland@ttds");
  175.     while( ! Button() );
  176.     utboard();
  177. }
  178.  
  179. say_something_else(){
  180.     draw_message("Just point and push until you get 5 in a row");
  181. }
  182.